package com.zerocarbon.framework.common.enums;

import com.zerocarbon.framework.common.extension.IBaseExceptionCode;

/**
 *    系统错误码(框架) 0-10000
 *  * 全局业务错误码   10000-15000
 * <p> 以下是建议分类，实际已实际业务分类为准
 * 预警异常编码    范围： 30000~34999
 * 标准服务异常编码 范围：35000~39999
 * 邮件服务异常编码 范围：40000~44999
 * 短信服务异常编码 范围：45000~49999
 * 权限服务异常编码 范围：50000-59999
 * 文件服务异常编码 范围：60000~64999
 * 日志服务异常编码 范围：65000~69999
 * 消息服务异常编码 范围：70000~74999
 * 开发者平台异常编码 范围：75000~79999
 * 搜索服务异常编码 范围：80000-84999
 * 共享交换异常编码 范围：85000-89999
 * 移动终端平台 异常码 范围：90000-94999
 * <p>
 * 安全保障平台    范围：        95000-99999
 * 软硬件平台 异常编码 范围：    100000-104999
 * 运维服务平台 异常编码 范围：  105000-109999
 * 统一监管平台异常 编码 范围：  110000-114999
 * 认证方面的异常编码  范围：115000-115999
 * @author wyf  2020年6月2日
 */
public enum BaseExceptionCode implements IBaseExceptionCode {

    //系统相关 start
    SUCCESS(0, "成功"),
    SYSTEM_ERROR(1, "内部服务错误~"),
    SYSTEM_TIMEOUT(2, "系统维护中~请稍后再试~"),
    SERIVE_ERROR(3, "服务异常"),
   
    SGIN_EX(4, "签名错误"),
    PARAM_EX(5, "参数类型解析异常"),
    SQL_EX(6, "运行SQL出现异常"),
    NULL_POINT_EX(7, "空指针异常"),
    ILLEGALA_ARGUMENT_EX(8, "无效参数异常"),
    
    VALID_PARAM_EX(9, "统一验证参数异常"),
    OPERATION_EX(10, "操作失败"),
    
    MEDIA_TYPE_EX(11, "请求类型异常"),
    LOAD_RESOURCES_EX(12, "加载资源出错"),
    SERVICE_MAPPER_EX(13, "Mapper类转换异常"),
    CAPTCHA_EX(14, "验证码校验失败"),
    //系统相关 end
    
    //http类
    OK(200, "OK"),
    BAD_REQUEST_ERROR(400, "错误的请求"),
    UNAUTHORIZED_ERROR(401, "未经授权"),
    NOT_FOUND_ERROR(404, "没有找到资源"),
    METHOD_NOT_ALLOWED_ERROR(405, "不支持当前请求类型"),
    TOO_MANY_REQUESTS_ERROR(403, "请求超过次数限制"),
    UNSUPPORTED_MEDIA_TYPE_ERROR(415, "不支持当前媒体类型"),
    INTERNAL_SERVER_ERROR(500, "内部服务错误"),
    BAD_GATEWAY_ERROR(502, "网关错误"),
    GATEWAY_TIMEOUT_ERROR(504, "网关超时"),
    
    //幂等性异常、分布锁异常
    IDEMPOTENCY_A_EX(600, "幂等性异常"),
    LOCK_A_EX(650, "分布锁异常"),

    //文件类
    REQUIRED_FILE_PARAM_EX(1001, "请求中必须至少包含一个有效文件"),
    
    //数据类
    DATA_SAVE_ERROR(2000, "新增数据失败"),
    DATA_UPDATE_ERROR(2001, "修改数据失败"),
    TOO_MUCH_DATA_ERROR(2002, "批量新增数据过多"),
    
    //token 用户 相关 start
    TOKEN_EXPIRED_EX(10001, "会话超时，请更新token"),
    TOKEN_INVALID_EX(10002, "Token验证未通过"),
    TOKEN_SIGNATURE_EX(10003, "不合法的token，请认真比对token的签名"),
    TOKEN_ILLEGAL_ARGUMENT_EX(10004, "缺少token参数"),            //AUTHORIZATION_INEXISTENCE 授权信息不存在
    TOKEN_GEN_FAIL_EX(10005, "生成token失败"),
    TOKEN_PARSER_FAIL_EX(10006, "解析用户身份错误，请重新登录"),
    TOKEN_OFFLINE_EX(10007, "您已在另一个设备登录"),
    
    USER_INVALID_EX(10008, "用户名或密码错误"),
    USER_ENABLED_EX(10009, "用户已经被禁用"),
    USER_NOTFIND_EX(10010, "用户不存在"),   
    USER_NOT_LOGIN_EX(10011, "用户未登录"),   
    //token 相关 end

    ;
    private int code;
    private String msg;

    BaseExceptionCode(int code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    @Override
    public int getCode() {
        return code;
    }

    @Override
    public String getMessage() {
        return msg;
    }

    public BaseExceptionCode build(String msg, Object... param) {
        this.msg = String.format(msg, param);
        return this;
    }

    public BaseExceptionCode param(Object... param) {
        msg = String.format(msg, param);
        return this;
    }
}
